package com.icangya.Utils;
import com.alibaba.fastjson.JSONObject;
import com.icangya.Value.StaticValue;
import com.icangya.weixin.sdk.WeChatTask;

import java.io.ByteArrayOutputStream;
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.InputStream;  
import java.net.HttpURLConnection;  
import java.net.URL;



/** 
 * @说明 从网络获取图片到本地 
 * @author 崔素强 
 * @version 1.0 
 * @since 
 */  
public class GetImage {

    /**
     *
     * @param mediaId 微信图片id
     * @param uploadpath （上传路径，实例：/data/upload/  )
     */
    public static String getWeixinImg(String mediaId,String uploadpath) {
        String url = StaticValue.WX.getMedie.replace("ACCESS_TOKEN", WeChatTask.ACCESS_TOKEN).replace("MEDIA_ID", mediaId);
//        String url = "http://www.baidu.com/img/baidu_sylogo1.gif";
        String picstr = null;
        try {
            picstr = WeixinUtil.getIstance().getMedie(mediaId);
        } catch (Exception e) {
            e.printStackTrace();
        }
        String[] strs=picstr.split("/");
        String suffix = strs[1];

        byte[] btImg = getImageFromNetByUrl(url);
        if(null != btImg && btImg.length > 0){  
            System.out.println("读取到：" + btImg.length + " 字节");  
            String fileName = mediaId+"."+suffix;
            return writeImageToDisk(btImg,fileName,uploadpath);
        }else{  
            System.out.println("没有从该连接获得内容");
            return null;
        }  
    }  
    /** 
     * 将图片写入到磁盘 
     * @param img 图片数据流 
     * @param fileName 文件保存时的名称 
     */  
    public static String writeImageToDisk(byte[] img, String fileName,String uploadpath){
        String strpath = null;
        try {  
            File file = new File(uploadpath + fileName);
            FileOutputStream fops = new FileOutputStream(file);  
            fops.write(img);  
            fops.flush();  
            fops.close();  
            System.out.println("===========================图片已经写入到服务器"+file.getPath());
            strpath = file.getPath();
        } catch (Exception e) {  
            e.printStackTrace();  
        }
        return strpath;
    }  
    /** 
     * 根据地址获得数据的字节流 
     * @param strUrl 网络连接地址 
     * @return 
     */  
    public static byte[] getImageFromNetByUrl(String strUrl){  
        try {  
            URL url = new URL(strUrl);  
            HttpURLConnection conn = (HttpURLConnection)url.openConnection();  
            conn.setRequestMethod("GET");  
            conn.setConnectTimeout(5 * 1000);  
            InputStream inStream = conn.getInputStream();//通过输入流获取图片数据  
            byte[] btImg = readInputStream(inStream);//得到图片的二进制数据  
            return btImg;  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return null;  
    }  
    /** 
     * 从输入流中获取数据 
     * @param inStream 输入流 
     * @return 
     * @throws Exception 
     */  
    public static byte[] readInputStream(InputStream inStream) throws Exception{  
        ByteArrayOutputStream outStream = new ByteArrayOutputStream();  
        byte[] buffer = new byte[1024];  
        int len = 0;  
        while( (len=inStream.read(buffer)) != -1 ){  
            outStream.write(buffer, 0, len);  
        }  
        inStream.close();  
        return outStream.toByteArray();  
    }  
}  